// axios.js

import axios from 'axios';
import { Message } from 'element-ui';
import store from '@/store';
import router from '@/router';

const baseURL = process.env.NODE_ENV === 'production'
  ? 'https://production-api-url.com'
  : 'http://localhost:3000';

const api = axios.create({
  baseURL,
  timeout: 5000,
});

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 判断是否是登录接口
    const isLoginRequest = config.url.includes('/login');

    // 如果不是登录接口，并且存在 token，则携带 token
    if (!isLoginRequest) {
      const token = store.state.token;
      if (token) {
        config.headers.authorization = token;
      }
    }

    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if(error.response && error.response.status === 400){
      Message.error(error.response.data)
    }
    if(error.response && error.response.status === 401){
      Message.error(error.response.data)
    }
    if(error.response && error.response.status === 404){
      Message.error(error.response.data)
    }
    if(error.response && error.response.status === 405){
      store.commit("setToken", "");
      router.push("/Login");
      Message.error(error.response.data)
    }
    if(error.response && error.response.status === 500){
      Message.error(error.response.data.error)
    }

    return Promise.reject(error);
  }
);

// 将 axios 实例作为 Vue 插件导出
const ApiPlugin = {
  install(Vue) {
    Vue.prototype.$api = api;
  }
};

export default ApiPlugin;
